#!/usr/bin/env python3
"""
脚本名称：ch48_exe.py
功能描述： 演示线程的队列优先级
作者：Gavin
创建日期：2025-05-22
版本：1.0
依赖库：无
使用方法： python ch48_exe.py
"""

import threading
import queue
import time

# 优先级队列
task_queue = queue.PriorityQueue()


# 工作线程函数
def worker():
    while True:
        try:
            # 阻塞获取任务（timeout=1 避免永久阻塞）
            priority, task = task_queue.get(block=True, timeout=1)
            print(f"{threading.current_thread().name} 处理任务：{task}（优先级：{priority}）")
            task_queue.task_done()
        except queue.Empty:
            print(f"{threading.current_thread().name} 退出")
            break


# 创建并启动3个工作线程
threads = []
for i in range(3):
    t = threading.Thread(target=worker, name=f"Worker-{i + 1}")
    t.start()
    threads.append(t)

# 向队列添加任务（模拟不同优先级的任务）
tasks = [
    (3, "清理日志"),
    (1, "处理用户支付"),
    (0, "响应服务器告警"),
    (2, "备份数据库"),
]
for task in tasks:
    task_queue.put(task)

# 等待所有任务完成
task_queue.join()

# 通知线程退出
for t in threads:
    t.join()

print("所有任务处理完成")
